﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel.DataAnnotations;
using System.Data;
using System.Data.SqlClient;

namespace PuroGameClassLibrary
{
    public class Usuario
    {
        public int? Idf_Usuario { get; set; }
        [Required(ErrorMessage="O nome é obrigatório")]
        public string Nme_Usuario { get; set; }
        [Required(ErrorMessage="O e-mail é obrigatório")]
        public string Eml_Usuario { get; set; }
        [Required(ErrorMessage="A senha é obrigatória")]
        public string Des_Senha { get; set; }
        public bool Flg_Ativo { get; set; }
        public DateTime Dta_Cadastro { get; set; }
        public string Num_IP { get; set; }
        public DateTime Dta_Ultimo_Acesso { get; set; }
       
        public Usuario(int pIdf_Usuario)
        {
            this.Idf_Usuario = pIdf_Usuario;
        }
        
        public void Save()
        {
            string sQuery = string.Empty;
            if (this.Idf_Usuario.HasValue)
                DataAccessLayer.ExecuteNonQuery(CommandType.StoredProcedure, "SP_PuroGame_Usuario_Insert", this.SetParameters());
            else
                this.Idf_Usuario = (int)DataAccessLayer.ExecuteScalar(CommandType.StoredProcedure, "SP_PuroGame_Usuario_Update", this.SetParameters());
        }

        public void CompleteObject()
        { 
            List<SqlParameter> param = new List<SqlParameter>();
            param.Add(new SqlParameter("@Idf_Usuario", SqlDbType.Int));
            param[0].Value = this.Idf_Usuario.Value;

            using (IDataReader iDr = DataAccessLayer.ExecuteReader(CommandType.StoredProcedure, "SP_PuroGame_Usuario_SelectById", param))
            {
                if (iDr.Read())
                {
                    this.Nme_Usuario = iDr["Nme_Usuario"].ToString();
                    this.Eml_Usuario = iDr["Eml_Usuario"].ToString();
                    this.Des_Senha = iDr["Des_Senha"].ToString();
                    this.Flg_Ativo = (bool)iDr["Flg_Ativo"];
                    this.Dta_Cadastro = (DateTime)iDr["Dta_Cadastro"];
                    this.Num_IP = iDr["Num_IP"].ToString();
                    this.Dta_Ultimo_Acesso = (DateTime)iDr["Dta_Ultimo_Acesso"];
                }
            }
        }

        private List<SqlParameter> SetParameters()
        {
            List<SqlParameter> param = new List<SqlParameter>();
            param.Add(new SqlParameter("@Idf_Usuario", SqlDbType.Int));
            param.Add(new SqlParameter("@Nme_Usuario", SqlDbType.VarChar));
            param.Add(new SqlParameter("@Eml_Usuario", SqlDbType.VarChar));
            param.Add(new SqlParameter("@Des_Senha", SqlDbType.VarChar));
            param.Add(new SqlParameter("@Flg_Ativo", SqlDbType.Bit));
            param.Add(new SqlParameter("@Dta_Cadastro", SqlDbType.DateTime));
            param.Add(new SqlParameter("@Num_IP", SqlDbType.VarChar));
            param.Add(new SqlParameter("@Dta_Ultimo_Acesso", SqlDbType.DateTime));

            if (this.Idf_Usuario.HasValue)
                param[0].Value = this.Idf_Usuario.Value;
            else
                param[0].Value = DBNull.Value;

            param[1].Value = this.Nme_Usuario;
            param[2].Value = this.Eml_Usuario;
            param[3].Value = this.Des_Senha;
            param[4].Value = this.Flg_Ativo;
            param[5].Value = this.Dta_Cadastro;
            param[6].Value = this.Num_IP;
            param[7].Value = this.Dta_Ultimo_Acesso;

            return param;
        }
    }
}
